package com.hxm.demo.test1;

import java.util.HashSet;
import java.util.Set;

/**
 * description: add a description
 *
 * @author huangxiaoming
 * @version 1.0.0
 * @date 2022/10/25 14:59:30
 */
public class TestLengthOfLongestSubstring {

    /**
     * 3. 无重复字符的最长子串
     *
     * @param args
     */
    public static void main(String[] args) {
        String s = "abcabcbb";
        System.out.println(lengthOfLongestSubstring(s));
    }

    /**
     * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
     *
     * @param s
     * @return
     */
//    public static int lengthOfLongestSubstring(String s) {
//        char[] chars = s.toCharArray();
//        int max = 0;
//        for (int i = 0; i < chars.length; i++) {
//            int m = 0, n = m + i;
//            while (m < chars.length && n < chars.length) {
//                if (duplicate(chars, m, n)) {
//                    max = Math.max(max, n - m + 1);
//                    break;
//                }
//                m++;
//                n++;
//            }
//        }
//        return max;
//    }
//
//    public static boolean duplicate(char[] chars, int start, int end) {
//        Set set = new HashSet<>();
//        for (int i = start; i <= end; i++) {
//            set.add(chars[i]);
//        }
//        if (set.size() == (end - start + 1)) {
//            return true;
//        }
//        return false;
//    }
    public static int lengthOfLongestSubstring(String s) {
        Set<Character> set = new HashSet<>();
        int max = 0, j = 0;
        for (int i = 0; i < s.length(); i++) {
            if (i != 0) {
                set.remove(s.charAt(i - 1));
            }
            while (j < s.length() && !set.contains(s.charAt(j))) {
                set.add(s.charAt(j));
                j++;
            }
            max = Math.max(max, set.size());
        }
        return max;
    }
}
